// ts中抽象类：类似接口，约束子类中的成员，包括一些具体的实现
// 大的类目建议使用抽象类


export { }   //确保跟其他实例没有成员冲突

// abstract :抽象类关键字，具体实现的逻辑业务，用于子类继承
// interface:接口也是约束成员，不包含一些具体业务的实现
abstract class Animal{
    eat(food:string):void{
        console.log('动物吃'+food);
    }
    // 抽象方法：不需要方法体，子类需要实现这个方法
    abstract run(distancce:number):void
}

class Dog extends Animal{
    // 重写继承的run方法的具体实现
    run(distance:number):void{
        console.log(`Dog run ${distance}`);
    }
}

const dog = new Dog()
// 继承抽象的类的业务
dog.eat('草')   //动物吃草
dog.run(20)    //Dog run 20

 